package com.ruoyi.system.service.impl;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.SysDeviceLocationMapper;
import com.ruoyi.system.domain.SysDeviceLocation;
import com.ruoyi.system.service.ISysDeviceLocationService;

/**
 * 设备位置信息Service业务层处理
 *
 * @author ruoyi
 */
@Service
public class SysDeviceLocationServiceImpl implements ISysDeviceLocationService {
    private final SysDeviceLocationMapper sysDeviceLocationMapper;

    public SysDeviceLocationServiceImpl(SysDeviceLocationMapper sysDeviceLocationMapper) {
        this.sysDeviceLocationMapper = sysDeviceLocationMapper;
    }

    /**
     * 查询设备位置信息
     *
     * @param id 位置ID
     * @return 设备位置信息
     */
    @Override
    public SysDeviceLocation selectSysDeviceLocationById(Long id) {
        return sysDeviceLocationMapper.selectSysDeviceLocationById(id);
    }

    /**
     * 查询设备最新位置信息
     *
     * @param deviceId 设备ID
     * @return 设备位置信息
     */
    @Override
    public SysDeviceLocation selectLatestLocationByDeviceId(String deviceId) {
        return sysDeviceLocationMapper.selectLatestLocationByDeviceId(deviceId);
    }

    /**
     * 查询设备位置信息列表
     *
     * @param sysDeviceLocation 设备位置信息
     * @return 设备位置信息
     */
    @Override
    public List<SysDeviceLocation> selectSysDeviceLocationList(SysDeviceLocation sysDeviceLocation) {
        return sysDeviceLocationMapper.selectSysDeviceLocationList(sysDeviceLocation);
    }

    /**
     * 查询设备历史轨迹
     *
     * @param deviceId  设备ID
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 设备位置信息集合
     */
    @Override
    public List<SysDeviceLocation> selectDeviceTrackByTime(String deviceId, Date startTime, Date endTime) {
        return sysDeviceLocationMapper.selectDeviceTrackByTime(deviceId, startTime, endTime);
    }

    /**
     * 新增设备位置信息
     *
     * @param sysDeviceLocation 设备位置信息
     * @return 结果
     */
    @Override
    public int insertSysDeviceLocation(SysDeviceLocation sysDeviceLocation) {
        if (sysDeviceLocation.getCreateTime() == null) {
            sysDeviceLocation.setCreateTime(new Date());
        }
        return sysDeviceLocationMapper.insertSysDeviceLocation(sysDeviceLocation);
    }

    /**
     * 修改设备位置信息
     *
     * @param sysDeviceLocation 设备位置信息
     * @return 结果
     */
    @Override
    public int updateSysDeviceLocation(SysDeviceLocation sysDeviceLocation) {
        return sysDeviceLocationMapper.updateSysDeviceLocation(sysDeviceLocation);
    }

    /**
     * 批量删除设备位置信息
     *
     * @param ids 需要删除的位置ID
     * @return 结果
     */
    @Override
    public int deleteSysDeviceLocationByIds(Long[] ids) {
        return sysDeviceLocationMapper.deleteSysDeviceLocationByIds(ids);
    }

    /**
     * 删除设备位置信息信息
     *
     * @param id 位置ID
     * @return 结果
     */
    @Override
    public int deleteSysDeviceLocationById(Long id) {
        return sysDeviceLocationMapper.deleteSysDeviceLocationById(id);
    }

    /**
     * 清理历史位置数据
     *
     * @param days 保留天数
     * @return 结果
     */
    @Override
    public int cleanHistoryLocationData(int days) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_MONTH, -days);
        Date beforeTime = calendar.getTime();
        return sysDeviceLocationMapper.deleteLocationDataBeforeTime(beforeTime);
    }

    /**
     * 获取指定用户和设备的GPS位置信息
     *
     * @param userId 用户ID
     * @param deviceId 设备ID
     * @return 设备位置信息
     */
    @Override
    public SysDeviceLocation selectLatestLocationByUserIdAndDeviceId(Long userId, Long deviceId) {
        return sysDeviceLocationMapper.selectLatestLocationByUserIdAndDeviceId(userId, deviceId);
    }
}